package com.example.swordjava;


import android.os.Build;

import androidx.annotation.RequiresApi;



import java.util.ArrayList;
import java.util.Comparator;
import java.util.PriorityQueue;

public class Test40 {

    public static void main(String[] args) {

        int[][] a = {{1, 2, 3, 4},
                {5, 6, 7, 8},
                {9, 10, 11, 12},
                {13, 14, 15, 16}};

        System.out.println(a[0][1]);

    }

    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;

        public TreeNode(int val) {
            this.val = val;

        }
    }

    /**
     * 最小的K个数
     * 给定一个长度为 n 的可能有重复值的数组，找出其中不去重的最小的 k 个数。
     * 例如数组元素是4,5,1,6,2,7,3,8这8个数字，则最小的4个数字是1,2,3,4(任意顺序皆可)。
     */
    @RequiresApi(api = Build.VERSION_CODES.N)
    public ArrayList<Integer> GetLeastNumbers_Solution(int[] input, int k) {
        // write code here
        if (k < 1 || input.length < k) {
            return new ArrayList<>();
        }
        //大顶堆
        PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        });

        for (int i = 0; i < input.length; i++) {
            if (i < k) {
                priorityQueue.add(input[i]);
            }
            if (i >= k && priorityQueue.peek() > input[i]) {
                priorityQueue.poll();
                priorityQueue.add(input[i]);
            }
        }
        return new ArrayList<>(priorityQueue);

    }

}














